/**
 * 
 */
package net.ib.mtalk.util;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;

/**
 * 이 클래스의 객체를 통해서 notification을 띄우거나 삭제하자.<br>
 * <br>
 * 생성시에 내부적으로 NotificationManager를 얻어와서 들고 있다가, 후속 요청이 발생하면 적절히 대응한다.
 * 
 * @author Arngard
 *
 */
public class NotiClient {

	protected Context mContext = null;
	protected NotificationManager notiManager = null;
	protected boolean hasNotification = false;
	
	public NotiClient(Context context) {
		mContext = context;
		notiManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
	}
	
	/**
	 * 지정된 ID값을 갖는 Notification 을 노출한다.
	 * @param id 해당 Notification 의 ID 값
	 * @param noti 노출할 Notification
	 */
	public void showNoti(int id, Notification noti) {
		notiManager.notify(id, noti);
		hasNotification = true;
	}

	/**
	 * 소리와 진동여부를 지정하여, Notification 을 노출한다.
	 * @param id 해당 Notification 의 ID 값
	 * @param noti 노출할 Notification
	 */
	@Deprecated
	public void showNoti(int id, Notification noti, boolean bSound) {
		if (bSound && noti.sound == null) {
			noti.defaults = Notification.DEFAULT_SOUND;
		} else
			noti.defaults = 0;
		
		notiManager.notify(id, noti);
		hasNotification = true;
	}

	/**
	 * 노출된 Notification을 삭제한다.
	 * @param id 삭제할 Notification ID
	 */
	public void closeNoti(final int id) {
		new Timer().schedule(new TimerTask() {
			@Override
			public void run() {
				if (notiManager != null)
					notiManager.cancel(id);
				hasNotification = false;
			}}, 2000);
	}
}
